package demo01;

public class Test01 {
    public static void main(String[] args) {
        //获得静态内部类对象
//        OuterClass.InnerClass inn = new OuterClass.InnerClass();
//        inn.test();
//        在静态内部类里面访问外部类的成员变量 ，需要在静态内部类内部实例化一个外部类的对象 ， 然后通过实例化的对象去访问

        //实例内部类 将静态内部类的 static 去掉
        //如何拿到实例内部类对象
        //首先获得外部类对象
//        OuterClass outerClass = new OuterClass();
//        然后再通过外部对象引用来获得实例内部类
//        OuterClass.InnerClass innerClass1 = outerClass.new InnerClass();
        OuterClass.InnerClass innerClass2 = new OuterClass().new InnerClass();
        innerClass2.test();
        /*1.当实例内部类有一个和外部同名的成员变量 ， 在市里内部类里访问给变量 ， 访问到的是 实例内部类内部的变量 ，
          如果必须要访问外部类的那个成员变量 ，可通过 外部类类名.this.变量名 来访问，或者实例化一个外部类对象 ， 然后引用访问

          2.实例内部类的 this 代表的就是这个类 ， 外部类类名.this 代表的是外部类
          3.外部类中的任何成员都可以在实例内部类中访问
          4.实力内部类所处的位置与外部类成员位置相同 ， 因此也受 public ， private 等限定符的约束
         5.实例内部类对象必须在现有外部类对象的前提下才能创建
         6.实例内部类的非静态方法中包含一个指向外部类对象的引用
         7.外部类中不能直接访问内部类中的成员 ， 如果要访问必须要创建内部类对象
         */

        /*匿名内部类
            见 demo02
         */

    }
}
